76 - 7 Defragmentierung des Hauptspeichers [ID:27652]
50 von 149 angezeigt

Nun, die externe Fragmentierung ist ein Problem, die ist auflösbar, diese Fragmentierung durch

Betriebssystemmaßnahmen. Eine Maßnahme ist einfach bei der Erzeugung eines neuen Lochs

eben zuzusehen, ob dieses Loch irgendwie an bereits bestehende Löcher angrenzt und dadurch

praktisch ein größeres Loch zu schaffen. Damit im Wesentlichen eben auch die Lochliste

zu verkürzen, weil man anstatt zwei oder drei Löcher vielleicht nur noch ein Loch

praktisch in der Liste verwalten muss. Diese Maßnahme, die kann man immer dann machen und

man wird sie auch dann genau dann tun, wenn man einen praktischen Gebrauchsstück freigibt.

Man nimmt das also zurück mit der Free-Operation oder mit irgendwelchen anderen Maßnahmen,

einfach die Zerstörung eines gesamten Prozessexemplars. Dann würden ja alle Gebrauchsstücke, die zu

diesem Prozessexemplar dann letztendlich gehören, wieder freigegeben werden. Die kommen alle

in die Lochliste rein und dann kann man prüfen, ob da irgendwie größere Löcher praktisch

durch Verschmelz und durch Vereinigung entstehen können. Damit kriegen wir größere Hohlräume

und das hat dann durchaus sehr positive andere Eigenschaften. Wir haben weniger Löcher,

dadurch haben wir natürlich geringere externe Fragmentierung, aber wir haben dadurch auch

weniger Lochdeskriptoren. Damit haben wir kürzere Lochlisten und wir haben damit kürzere

Suchzeiten. Das beschleunigt also insgesamt die Speicherzuteilung und gibt uns eine kürzere

Antwortzeit bei einer Speicheranfrage. So, die Löchervereinigung, die kann in unterschiedlicher

Art und Weise geschehen. Letztendlich haben wir hier vier verschiedene Möglichkeiten,

die wir auseinanderhalten müssen, je nachdem wie praktisch das Gebrauchsstück, was freizugeben

ist, woraus ein Loch entstehen soll, wie das praktisch in diesem Adressraum des betreffenden

Prozesses angeordnet ist oder letztendlich auch im Hauptspeicher platziert ist. Wenn wir

eine Situation haben, wo so ein Loch, das entstehen soll, zwischen zwei Gebrauchsstücken,

den letztendlich liegt, dann ist keine Vereinigung möglich, aber in den anderen drei Varianten

sehr wohl. Wenn wir eine Situation haben, wo dieses neue Loch direkt nach einem Loch

entstehen würde, dann vereinigt man diese beiden Löcher und hat ein entsprechendes großes

Loch. Ich glaube, dass gleiche macht man, wenn dieses neue entstehende Loch direkt vor einem

Loch ist, dann wird es mit seinem Nachfolger, was bereits als Loch denn existiert, vereinigt.

Ja, oder es liegt, das ist der beste Fall, genau zwischen zwei Löchern, dann kombiniert

man letztendlich diese Schritte zwei und drei und generiert, anstatt drei Löcher in der

Liste zu haben, einfach ein Loch und hat dann nur noch einen Loch des Crypto in der Liste.

Da gibt es jetzt natürlich auch eine gewisse Abhängigkeit zum Zuteilungsverfahren, wo man

denn sehen muss, dass diese Verschmelzungsaufwände durchaus beträchtlich sein können. Da sieht

man dann auch, welche Vorteile gewisse Zuteilungsverfahren haben, wenn man eben Verschmelzung noch mit

berücksichtigen soll. Beim Buddy ist es einfach so, da muss man das passende Buddy-Stück

letztendlich halt finden. Also wenn man jetzt ein Objekt freigibt und weiß, zu welchem Buddy

das gehört von der Größe, dann muss man genau das gleiche Angrenzende, der Kumpel sozusagen,

im Hauptspeicher da zu finden. Dann muss man überprüfen, ob denn das Loch, was man im Hauptspeicher

halt hat, ob das eben als Buddy gilt. Und das ist mal hier so ein bisschen skizziert,

wie man sich so einen Check denn entsprechend vorstellen kann, wo man die Zweierpotenzgröße

natürlich dann halt überprüft und dann letztendlich mit dem zweiten Check nachprüfen muss,

ob die wirklich aneinander grenzen und ob dadurch dann entsprechend die Größeninformationen

wirklich gewertet ist. Das ist schon ein bisschen problematisch. Wir haben ja auch gesehen,

dass dieses Buddy-Verfahren auch hinsichtlich der Fragmentierungsfrage nicht unbedingt sehr

positiv zu sehen ist. Bei dem First und Next Fit haben wir folgende Situationen. Hier wissen wir

nochmal, die Lochliste ist nach der Größe der Adressen der jeweiligen Löcher, den halt nach

hinten hinauf steigend sortiert. Also die Adresse ist das Sortierkriterium. Wenn wir jetzt auch so ein

Loch schaffen wollen, wir haben ein Gebrausstück, dann kennen wir ja auch die Adresse dieses

Gebrausstücks, denn genau den Speicher an dieser Adresse wollen wir freigeben und dann suchen wir

in der Liste, ob denn dieses Loch praktisch ein Nachbar ist. Und ein Nachbar wäre es genau dann,

wenn wir jetzt mal so ein Listenelement haben, wenn wir auf diese Anfangsadresse dieses

Teil eines Kapitels:
12.2 Speicherzuteilung

Zugänglich über

Offener Zugang

Dauer

00:15:44 Min

Aufnahmedatum

2021-01-12

Hochgeladen am

2021-01-12 13:19:50

Sprache

de-DE

Einbetten
Wordpress FAU Plugin
iFrame
Teilen